package com.hsylient.javase.chapter10;

import org.junit.Test;

import java.nio.charset.StandardCharsets;

/**
 * 所谓的码点codepoint好像是这个字符的unicode编码的十进制表示
 */
public class MyString {

    @Test
    public void testConstructor() {
        String string = new String(new byte[]{97, 98, 99});
        System.out.println(string);
        String name = new String(new char[]{'h', 's', 'y', 'l', 'i', 'e', 'n', 't'});
        System.out.println(name);

        /*
            这个构造方法的参数是一个字节数组，第一个想要解码为字符串的字节下标，以及想要解码的长度
            在IO流中有使用到，提前准备一个字节数组，io流往字节数组中读入了多少，就输出多少，精确定位
            而不是说每次都读整个数组，因为可能网络波动的原因，这个数组就没有填充满
         */
        byte[] bytes = {97, 98, 99, 100, 101, 102, 103, 104};
        String byte2String = new String(bytes, 1, 3);
        System.out.println(byte2String);

        String s = new String(new byte[]{97, 98, 99}, StandardCharsets.US_ASCII);
        System.out.println(s);
    }

    @Test
    public void testMethod() {
        String string = "hsylient";
        System.out.println(string.charAt(1));
        string.chars().forEach(System.out::println);
        System.out.println(string.codePointAt(0));
        System.out.println(string.compareToIgnoreCase("Hsylient"));
        String res = string.concat(" is vary good");
        System.out.println(res);
        System.out.println(
                string.contentEquals(
                    new StringBuilder()
                            .append("hsylient")
        ));
        System.out.println(String.copyValueOf(new char[]{'h', 's', 'y', 'l', 'i', 'e', 'n', 't'}));
        System.out.println(string.repeat(3));
        System.out.println(string.substring(3, 5));
    }

    @Test
    public void testFormatString() {
        System.out.printf("");
    }
}
